package com.semis.business.base.service;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.semis.business.base.domain.BasLandSystem;
import com.semis.common.core.domain.ListSelect;
import com.semis.common.core.domain.entity.SysUser;

import java.util.List;
import java.util.Map;

/**
 * 地块系统数据Service接口
 *
 * @author litu
 * @date 2023-07-17
 */
public interface IBasLandSystemService extends IService<BasLandSystem> {

    /**
     * 查询地块系统数据列表
     *
     * @param basLandSystem 地块系统数据
     * @param user          用户信息
     * @return 地块系统数据集合
     */
    public List<BasLandSystem> selectBasLandSystemList(BasLandSystem basLandSystem, SysUser user);

    /**
     * 查询地块系统数据下拉列表
     *
     * @param basLandSystem 地块系统数据
     * @param user          用户信息
     * @return 地块系统数据集合
     */
    public List<ListSelect> selectBasLandSystemSelect(BasLandSystem basLandSystem, SysUser user);

    /**
     * 根据地块编码获取地块的全部信息
     *
     * @param code 地块编码
     * @return
     */
    BasLandSystem getByCode(String code);

    /**
     * 导入地块系统数据
     *
     * @param list            地块系统数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作用户
     * @return 结果
     */
    public String importLand(List<BasLandSystem> list, Boolean isUpdateSupport, String operName);

    /**
     * 批量上传地块系统数据地理信息shp文件
     *
     * @param fileName shp的zip文件路径
     * @return
     */
    public String batchUploadLandShpFile(String fileName);

    /**
     * 上传地块系统数据地理信息shp文件
     *
     * @param fileName shp文件web路径
     * @param code     地块编码
     * @return
     */
    public String uploadLandShpFile(String fileName, String code);

    /**
     * 上传地块系统数据地理信息shp文件并匹配
     *
     * @param fileName shp文件web路径
     * @param code     地块编码
     * @return
     */
    public Map matchLandShpFile(String fileName, String code);

    /**
     * 获取坐标点周围的地块系统数据
     *
     * @param longitude 中心经度
     * @param latitude  中心纬度
     * @param extent    范围长度（千米）
     */
    public List<JSONObject> getSurroundingLand(Float longitude, Float latitude, Integer extent);

}
